package br.org.acessobrasil.portal.persistencia;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.org.acessobrasil.portal.modelo.Privilegio;
import br.org.acessobrasil.portal.modelo.Sitio;
import br.org.acessobrasil.portal.modelo.Usuario;

public class PrivilegioDaoSpring implements PrivilegioDao{

	private EntityManager em;
	private static PrivilegioDaoSpring instance;
	
	public PrivilegioDaoSpring(){
		instance = this;
	}
	
	@PersistenceContext
	public void setEntityManager(EntityManager em) {
		this.em = em;
	}

	private EntityManager getEntityManager() {
		return em;
	}
	
	public void apagar(Privilegio privilegio) throws Exception {
		getEntityManager().remove(privilegio);
	}

	public void create(Privilegio privilegio) throws Exception {
		getEntityManager().persist(privilegio);
	}

	@SuppressWarnings("unchecked")
	@Deprecated
	public List<Privilegio> listar() throws Exception {
		return getEntityManager().createQuery("from Privilegio").getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Privilegio> listar(Usuario usuario) throws Exception {
		return getEntityManager().createQuery("from Privilegio p where p.usuario = ?").setParameter(1, usuario).getResultList();
	}

	public Privilegio select(Long nu_Privilegio) throws Exception {
			return (Privilegio) getEntityManager().createQuery("from Privilegio p where p.nuPrivilegio = ?").setParameter(1,nu_Privilegio).getSingleResult();
	}

	public Privilegio select(Usuario usuario, Sitio sitio) throws Exception {
		Query query = getEntityManager().createQuery("from Privilegio p where p.usuario = ? and p.sitio = ?");
		query.setParameter(1,usuario);
		query.setParameter(2, sitio);
		return (Privilegio)query.getSingleResult();
	}

	public void update(Privilegio privilegio) {
		getEntityManager().merge(privilegio);
	}
	public static PrivilegioDaoSpring getInstance() {
		return instance;
	}

	public static void setInstance(PrivilegioDaoSpring instance) {
		PrivilegioDaoSpring.instance = instance;
	}
}
